package city.spring.modules.checkinfee.repository;

import city.spring.modules.checkinfee.entity.CheckinfeeEntity;
import city.spring.modules.checkinfee.vo.CheckinfeeVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * 存储库：入院收费
 *
 * @author 谢金婷
 * @date 2020-08-27 10:19:04
 */
@Repository
public interface CheckinfeeRepository extends BaseMapper<CheckinfeeEntity> {
    IPage<CheckinfeeVO> listPage(Page<? extends CheckinfeeEntity> page, @Param(Constants.WRAPPER) Wrapper<? extends CheckinfeeEntity> wrapper);

    CheckinfeeEntity getCheckfeeByolamanId(String oldmanId);

    IPage<CheckinfeeVO> monthlyFeelist(Page<? extends CheckinfeeEntity> page, @Param(Constants.WRAPPER) Wrapper<? extends CheckinfeeEntity> wrapper);

    List<CheckinfeeVO> monthlyFeelist2(@Param(Constants.WRAPPER) Wrapper<? extends CheckinfeeEntity> wrapper);

    CheckinfeeVO monthlyFeelist3(@Param(Constants.WRAPPER) Wrapper<? extends CheckinfeeEntity> wrapper);

    /**
     * 获取最新的缴费记录
     *
     * @param personId
     * @return
     */
    CheckinfeeEntity getLatestPayRecord(String personId);

    /**
     * 根据老人id查找缴费类别为1：入院缴费的缴费记录
     *
     * @param oldmanId
     * @return
     */
    CheckinfeeEntity getCheckinfeeWithCategory(String oldmanId);

    /**
     * 获取月度缴费记录
     *
     * @param page
     * @param wrapper
     * @return
     */
    IPage<CheckinfeeVO> monthPayRecords(Page<? extends CheckinfeeEntity> page, @Param(Constants.WRAPPER) Wrapper<? extends CheckinfeeEntity> wrapper);

    /**
     * 获取月度缴费的打印信息
     *
     * @param feeid
     * @return
     */
    CheckinfeeVO monthPayPrintInfo(String feeid);


    /**
     * 退住结算：获取已交费用记录（入院缴费/月度缴费）
     *
     * @param personId
     * @param leaveMonth
     * @param taldays
     * @return
     */
    List<CheckinfeeVO> settlementPayRecords(String personId, int leaveMonth, int taldays);

    /**
     * 退住结算：获取 某个老人 是否需要补交费，补交到哪个月
     *
     * @param personId
     * @return
     */
    List<Integer> isAlreadyPayBeforeLeaveMonth(String personId);

    /**
     * 结算账单：已交账单 根据结算记录Id，对应的老人id，获取入住记录中老人最新的的入住日期、退住日期，再从缴费录checkinfee获取这两个日期间的记录，再由费用记录expense_record表获取金额信息
     *
     * @param oldmanId
     * @return
     */
    List<CheckinfeeVO> getpayRecords(String oldmanId, Integer leaveMonth);

    /**
     * 退住月之后的记录记失效状态
     */
    void updateInvalidState1(String oldmanId, Date leaveDate);

    /**
     * 退住月之后的记录记失效状态
     */
    void updateInvalidState2(String oldmanId, Date monthEnd);

}